package com.hjw.config;
 
import cn.dev33.satoken.stp.StpInterface;
import com.hjw.entity.User;
import com.hjw.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
/**
 * <p>该类实现了 StpInterface 接口，用于自定义 Sa - Token 框架中获取用户权限列表和角色列表的逻辑
 * @author hjw
 */
@Slf4j
@Component
public class StpInterfaceImpl implements StpInterface {

   @Autowired
   private UserService userService;

    /**
     * 此方法用于获取指定用户在特定登录类型下的权限列表。
     * 在实际的业务场景中，权限信息通常从数据库中查询获取，
     * 这里为了简单演示，直接模拟返回一些权限。
     *
     * @param loginId    用户的登录 ID，用于唯一标识一个用户
     * @param loginType  用户的登录类型，例如 "web"、"app" 等
     * @return 返回一个包含用户权限标识的列表
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginType) {
        System.out.println("获取权限");
        // * 代表了超级管理权限
        String userRole = this.getUserRole(Integer.parseInt(loginId.toString()))+"*";

        List<String> list = new ArrayList<>();
         list.add(userRole);
        // 向列表中添加具体的权限标识
        // 返回包含用户权限标识的列表
        return list;
    }
    /**
     * 此方法用于获取指定用户在特定登录类型下的角色列表。
     * 同样，在实际业务中，角色信息通常从数据库中获取，
     * 这里进行简单模拟。
     *
     * @param loginId    用户的登录 ID，用于唯一标识一个用户
     * @param loginType  用户的登录类型，例如 "web"、"app" 等
     * @return 返回一个包含用户角色标识的列表
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginType) {
        System.out.println("获取角色");
        String userRole = this.getUserRole(Integer.parseInt(loginId.toString()));

        // 创建一个 ArrayList 用于存储角色标识
        List<String> list = new ArrayList<>();
        // 向列表中添加角色标识，表示用户拥有XX角色
        list.add(userRole);

        // 返回包含用户角色标识的列表
        return list;
    }

    public String getUserRole(Integer id){

        User user = userService.findById(id);
        return user.getRole();
    }
}
 